/**
  ******************************************************************************
  * @file    kea128_gpio.h
  * @author  花溪村长
  * @version V1.0
  * @date    18-8-2015
  * @brief   This file contains all the functions prototypes for the GPIO 
  *          firmware library.
  ******************************************************************************
**/ 

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __KEA128_GPIO_H
#define __KEA128_GPIO_H
#ifdef __cplusplus
 extern "C" {
#endif
#include "SKEAZ1284.h"  
	 
#define PTA    (0)
#define PTB    (1)
#define PTC    (2)
#define PTD    (3)
#define PTE    (4)
#define PTF    (5)
#define PTG    (6)
#define PTH    (7)
#define PTI    (8)
	 
#define IS_GET_PORT(PORT)    (((PORT) == PTA) || \
                              ((PORT) == PTB) || \
                              ((PORT) == PTC) || \
                              ((PORT) == PTD) || \
                              ((PORT) == PTE) || \
                              ((PORT) == PTF) || \
                              ((PORT) == PTG) || \
                              ((PORT) == PTH) || \
															((PORT) == PTI) || \))
        
#define GPIO_Pin_0 (1<<0)
#define GPIO_Pin_1 (1<<1)
#define GPIO_Pin_2 (1<<2)
#define GPIO_Pin_3 (1<<3)
#define GPIO_Pin_4 (1<<4)
#define GPIO_Pin_5 (1<<5)
#define GPIO_Pin_6 (1<<6)
#define GPIO_Pin_7 (1<<7)
#define GPIO_Pin_All (0xff)		

#define IS_GPIO_PIN(PIN)  ((PIN == GPIO_Pin_0 || \
														PIN == GPIO_Pin_1 || \
														PIN == GPIO_Pin_2 || \
														PIN == GPIO_Pin_3 || \
														PIN == GPIO_Pin_4 || \
														PIN == GPIO_Pin_5 || \
														PIN == GPIO_Pin_6 || \
														PIN == GPIO_Pin_7 || \
														PIN == GPIO_Pin_All )) 

//初始化状态
typedef enum
{ 
	Bit_RESET = 0,
  Bit_SET
}BitAction;
#define IS_GPIO_BIT_ACTION(ACTION) (((ACTION) == Bit_RESET) || ((ACTION) == Bit_SET))

//GPIO模式
typedef enum
{
  GPIO_Mode_IPD = 0x00,    //输入
  GPIO_Mode_IPU = 0x01,    //上拉输入
  GPIO_Mode_OUT = 0x02,    //输出 
	
}GPIO_Mode_TypeDef;

#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_Mode_IPD)         || \
                            ((MODE) == GPIO_Mode_IPU)         || \
														((MODE) == GPIO_Mode_OUT_HD)      || \
                            ((MODE) == GPIO_Mode_OUT) )


//初始化结构体
typedef struct
{
	uint16_t GPIO_Pin; 
	uint16_t GPIOx; 
	BitAction GPIO_InitState;
	GPIO_Mode_TypeDef GPIO_Mode;		
}GPIO_InitTypeDef;


//功能函数
//GPIO 初始化
void GPIO_Init(GPIO_InitTypeDef* GPIO_InitStructure);
//GPIO 电平翻转
void GPIO_ToggleBit(uint16_t GPIOx,uint16_t GPIO_Pin);
//GPIO 设置高电平
void GPIO_SetBits(uint16_t GPIOn, uint16_t GPIO_Pin);
//GPIO 设置低电平
void GPIO_ResetBits(uint16_t GPIOn, uint16_t GPIO_Pin);
//GPIO 设置端口数据
void GPIO_Write(uint16_t GPIOn,uint32_t PortVal);
//GPIO 读取输出状态I/O数据
uint8_t GPIO_ReadOutputDataBit(uint16_t GPIOn, uint16_t GPIO_Pin);
//GPIO 读取输出状态端口数据
uint32_t GPIO_ReadOutputData(uint16_t GPIOn,uint16_t GPIO_Pin);
//GPIO 读取输入状态I/O数据
uint8_t GPIO_ReadInputDataBit(uint16_t GPIOn, uint16_t GPIO_Pin);
//GPIO 读取输入状态端口数据
uint32_t GPIO_ReadInputData(uint16_t GPIOn, uint16_t GPIO_Pin);

#endif
